package com.itextpdf.text.pdf; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Phrase; import com.itextpdf.text.error_messages.MessageLocalization; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class PdfACopyTest { protected static final String outputDir = "./target/test/copy/"; static { new File(outputDir).mkdirs(); try { MessageLocalization.setLanguage("en", "US"); } catch (IOException e) { } } @Test public void testCreatePdfA_1() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String testName = "testCreatePdfA_1.pdf"; FileOutputStream outputPdfStream = new FileOutputStream(outputDir+testName); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1B); copy.createXmpMetadata(); document.open(); document.addLanguage("en-US"); PdfReader reader = new PdfReader(f1); PdfImportedPage page = copy.getImportedPage(reader, 1); PdfCopy.PageStamp stamp = copy.createPageStamp(page); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 24); ColumnText.showTextAligned(stamp.getUnderContent(), Element.ALIGN_CENTER, new Phrase("Hello world!", font), 100, 500, 0); stamp.alterContents(); copy.addPage(page); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); copy.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); copy.close(); } @Test public void testMergeFields1() throws IOException, DocumentException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a-2.pdf"; String testName = "testMergeFields1.pdf"; FileOutputStream outputPdfStream = new FileOutputStream(outputDir+testName); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1A); copy.setMergeFields(); copy.createXmpMetadata(); copy.setTagged(); document.open(); document.addLanguage("en-US"); for (String f : new String[] {f1, f2}) { PdfReader reader = new PdfReader(f); copy.addDocument(reader); } ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); copy.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); copy.close(); } @Test public void testMergeFields2() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a-2.pdf"; String f3 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1b.pdf"; OutputStream outputPdfStream = new ByteArrayOutputStream(); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1A); copy.setMergeFields(); copy.createXmpMetadata(); copy.setTagged(); document.open(); document.addLanguage("en-US"); boolean exceptionThrown = false; try { for (String f : new String[]{f1, f2, f3}) { PdfReader reader = new PdfReader(f); copy.addDocument(reader); } } catch (PdfAConformanceException e) { if (e.getMessage().contains("Incompatible PDF/A conformance level")) exceptionThrown = true; } if (!exceptionThrown) junit.framework.Assert.fail("PdfAConformanceException should be thrown."); } @Test public void testMergeFields3() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-2a.pdf"; OutputStream outputPdfStream = new ByteArrayOutputStream(); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1A); copy.setMergeFields(); copy.createXmpMetadata(); copy.setTagged(); document.open(); document.addLanguage("en-US"); boolean exceptionThrown = false; try { for (String f : new String[]{f1, f2}) { PdfReader reader = new PdfReader(f); copy.addDocument(reader); } } catch (PdfAConformanceException e) { if (e.getMessage().contains("Different PDF/A version")) exceptionThrown = true; } if (!exceptionThrown) junit.framework.Assert.fail("PdfAConformanceException should be thrown."); } @Test public void testMergeFields4() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/source16.pdf"; OutputStream outputPdfStream = new ByteArrayOutputStream(); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1B); copy.setMergeFields(); copy.createXmpMetadata(); copy.setTagged(); document.open(); document.addLanguage("en-US"); boolean exceptionThrown = false; try { for (String f : new String[]{f1, f2}) { PdfReader reader = new PdfReader(f); copy.addDocument(reader); } } catch (PdfAConformanceException e) { if (e.getMessage().contains("Only PDF/A documents can be added in PdfACopy")) exceptionThrown = true; } if (!exceptionThrown) junit.framework.Assert.fail("PdfAConformanceException should be thrown."); } @Test public void testImportedPage1() throws IOException, DocumentException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a-2.pdf"; String testName = "testImportedPage1.pdf"; FileOutputStream outputPdfStream = new FileOutputStream(outputDir+testName); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1A); copy.createXmpMetadata(); copy.setTagged(); document.open(); document.addLanguage("en-US"); for (String f : new String[] {f1, f2}) { PdfReader reader = new PdfReader(f); for (int i = 1; i <= reader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(reader, i, true)); } } ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); copy.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); copy.close(); } @Test public void testImportedPage2() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a-2.pdf"; String f3 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-2a.pdf"; OutputStream outputPdfStream = new ByteArrayOutputStream(); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1A); copy.createXmpMetadata(); copy.setTagged(); document.open(); document.addLanguage("en-US"); boolean exceptionThrown = false; try { for (String f : new String[]{f1, f2, f3}) { PdfReader reader = new PdfReader(f); for (int i = 1; i <= reader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(reader, i, true)); } } } catch (PdfAConformanceException e) { if (e.getMessage().contains("Different PDF/A version")) exceptionThrown = true; } if (!exceptionThrown) junit.framework.Assert.fail("PdfAConformanceException should be thrown."); } @Test public void testImportedPage3() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1b-2.pdf"; String testName = "testImportedPage3.pdf"; OutputStream outputPdfStream = new FileOutputStream(outputDir + testName); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1B); copy.createXmpMetadata(); document.open(); for (String f : new String[] {f1, f2}) { PdfReader reader = new PdfReader(f); for (int i = 1; i <= reader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(reader, i)); } } ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); copy.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); copy.close(); } @Test public void testImportedPage4() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-2a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-2u.pdf"; String f3 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-2b.pdf"; String testName = "testImportedPage4.pdf"; OutputStream outputPdfStream = new FileOutputStream(outputDir + testName); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_2B); copy.createXmpMetadata(); document.open(); for (String f : new String[] {f1, f2, f3}) { PdfReader reader = new PdfReader(f); for (int i = 1; i <= reader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(reader, i)); } } ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); copy.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); copy.close(); } @Test public void testImportedPage5() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-3a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-3u.pdf"; String testName = "testImportedPage5.pdf"; OutputStream outputPdfStream = new FileOutputStream(outputDir + testName); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_3U); copy.createXmpMetadata(); document.open(); for (String f : new String[]{f1, f2}) { PdfReader reader = new PdfReader(f); for (int i = 1; i <= reader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(reader, i)); } } ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); copy.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); copy.close(); } @Test public void testImportedPage6() throws DocumentException, IOException { String f1 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-3a.pdf"; String f2 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-3u.pdf"; String f3 = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-3b.pdf"; String testName = "testImportedPage5.pdf"; OutputStream outputPdfStream = new ByteArrayOutputStream(); Document document = new Document(); PdfACopy copy = new PdfACopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_3U); copy.createXmpMetadata(); document.open(); boolean exceptionThrown = false; try { for (String f : new String[]{f1, f2, f3}) { PdfReader reader = new PdfReader(f); for (int i = 1; i <= reader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(reader, i)); } } } catch (PdfAConformanceException e) { if (e.getMessage().contains("Incompatible PDF/A conformance level")) exceptionThrown = true; } if (!exceptionThrown) junit.framework.Assert.fail("PdfAConformanceException should be thrown."); } @Test public void testSmartCopyCreatePdfA_1() throws DocumentException, IOException { String fileName = "./src/test/resources/com/itextpdf/text/pdf/copy/pdfa-1a.pdf"; String testName = "testSmartCopyPdfA_1.pdf"; FileOutputStream outputPdfStream = new FileOutputStream(outputDir+testName); Document document = new Document(); PdfCopy copy = new PdfASmartCopy(document, outputPdfStream, PdfAConformanceLevel.PDF_A_1B); copy.createXmpMetadata(); document.open(); document.addLanguage("en-US"); PdfReader reader = new PdfReader(fileName); PdfImportedPage page = copy.getImportedPage(reader, 1); copy.addPage(page); copy.close(); } }